package com.push.spider.utils;

import org.apache.commons.lang.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ExtractionTools {

  /** * 提取text中的身份证 * @param text * @return */
  public static String pickUpCardNo(String text) {
    List<String> list = new ArrayList<String>();
    String reg = "\\d{17}[\\d|x|X]|\\d{15}";
    Pattern pattern = Pattern.compile(reg);
    Matcher matcher = pattern.matcher(text);
    while (matcher.find()) {
      String cardNo = matcher.group();
      if (CheckIdCardUtils.check(cardNo)) {
        return matcher.group();
      }
    }
    return null;
  }
  /** * 提取text中的手机号码 * @param text * @return */

  public static String pickUpPhoneNo(
      String text) {
    String regExp = "(1[3-9]\\d{9})";
    Pattern phonePattern = Pattern.compile(regExp);
    Matcher matcher = phonePattern.matcher(text);
    while (matcher.find()) {
      return matcher.group();
    }
    return null;
  }
  /** * * @author mxf * @Date 2019/10/28 * @param str * @return 提取人名 */

  public static String getStrName(String str) {
    String regEx =
        "(王|李|张|刘|陈|杨|黄|赵|吴|周|徐|孙|马|朱|胡|郭|何|高|林|罗|郑|梁|谢|宋|唐|许|韩|冯|邓|曹|彭|曾"
            + "|肖|田|董|袁|潘|于|蒋|蔡|余|杜|叶|程|苏|魏|吕|丁|任|沈|姚|卢|姜|崔|钟|谭|陆|汪|范|金|石|廖|贾|夏|韦|傅"
            + "|方|白|邹|孟|熊|秦|邱|江|尹|薛|闫|段|雷|侯|龙|史|黎|贺|顾|毛|郝|龚|邵|万|钱|覃|武|戴|孔|汤|庞|樊|兰|殷"
            + "|施|陶|洪|翟|安|颜|倪|严|牛|温|芦|季|俞|章|鲁|葛|伍|申|尤|毕|聂|柴|焦|向|柳|邢|岳|齐|沿|梅|莫|庄|辛|管"
            + "|祝|左|涂|谷|祁|时|舒|耿|牟|卜|路|詹|关|苗|凌|费|纪|靳|盛|童|欧|甄|项|曲|成|游|阳|裴|席|卫|查|屈|鲍|位"
            + "|覃|霍|翁|隋|植|甘|景|薄|单|包|司|柏|宁|柯|阮|桂|闵|欧阳|解|强|丛|华|车|冉|房|边|辜|吉|饶|刁|瞿|戚|丘"
            + "|古|米|池|滕|晋|苑|邬|臧|畅|宫|来|嵺|苟|全|褚|廉|简|娄|盖|符|奚|木|穆|党|燕|郎|邸|冀|谈|姬|屠|连|郜|晏"
            + "|栾|郁|商|蒙|计|喻|揭|窦|迟|宇|敖|糜|鄢|冷|卓|花|艾|蓝|都|巩|稽|井|练|仲|乐|虞|卞|封|竺|冼|原|官|衣|楚"
            + "|佟|栗|匡|宗|应|台|巫|鞠|僧|桑|荆|谌|银|扬|明|沙|薄|伏|岑|习|胥|保|和|蔺|水|云|昌|凤|酆|常|皮|康|元|平"
            + "|萧|湛|禹|无|贝|茅|麻|危|骆|支|咎|经|裘|缪|干|宣|贲|杭|诸|钮|嵇|滑|荣|荀|羊|於|惠|家|芮|羿|储|汲|邴|松"
            + "|富|乌|巴|弓|牧|隗|山|宓|蓬|郗|班|仰|秋|伊|仇|暴|钭|厉|戎|祖|束|幸|韶|蓟|印|宿|怀|蒲|鄂|索|咸|籍|赖|乔"
            + "|阴|能|苍|双|闻|莘|贡|逢|扶|堵|宰|郦|雍|却|璩|濮|寿|通|扈|郏|浦|尚|农|别|阎|充|慕|茹|宦|鱼|容|易|慎|戈"
            + "|庚|终|暨|居|衡|步|满|弘|国|文|寇|广|禄|阙|东|殴|殳|沃|利|蔚|越|夔|隆|师|厍|晃|勾|融|訾|阚|那|空|毋|乜"
            + "|养|须|丰|巢|蒯|相|后|红|权逯|盖益|桓|公|万俟|司马|上官|夏侯|诸葛|闻人|东方|赫连|皇甫|尉迟|公羊|澹台"
            + "|公冶|宗政|濮阳|淳于|单于|太叔|申屠|公孙|仲孙|轩辕|令狐|钟离|宇文|长孙|慕容|鲜于|闾丘|司徒|司空|亓官"
            + "|司寇|仉|督|子车|颛孙|端木|巫马|公西|漆雕|乐正|壤驷|公良|拓跋|夹谷|宰父|谷粱|法|汝|钦|段干|百里|东郭"
            + "|南门|呼延|归海|羊舌|微生|帅|缑|亢|况|郈|琴|梁丘|左丘|东门|西门|佘|佴|伯|赏|南宫|墨|哈|谯"
            + "|笪|年|爱|仝|代)[\u4E00-\u9FA5]{1,6}";
    Pattern p = Pattern.compile(regEx);
    Matcher m = p.matcher(str);
    while (m.find()) {
      String personName = m.group();
      return personName;
    }
    return null;
  }

  public static String getAddress(String str) {
    String regex = "([\\u4E00-\\u9FA5A-Za-z0-9_]+(省|市|区|县|道|路|街|号)){2,}";
    Pattern phonePattern = Pattern.compile(regex);
    Matcher matcher = phonePattern.matcher(str);
    while (matcher.find()) {
      return matcher.group();
    }
    return null;
  }
  /** * 将初始数据进行分组解析 * @param str * @return */

  public static List<PersonInfo> getRealName(String str) {
    str = str.replace("(", "（").replace(")", "）");
    String[] a = str.split("）");
    List<PersonInfo> infos = new ArrayList<>();
    for (String b : a) {
      String cardNo = pickUpCardNo(b);
      if (StringUtils.isEmpty(cardNo)) {
        continue;
      }
      b = b.replace(cardNo, "");
      String phoneNo = pickUpPhoneNo(b);
      /*            if(StringUtils.isEmpty(phoneNo)){                continue;
      }*/ String name = getStrName(b);
      if (StringUtils.isEmpty(name)) {
        continue;
      }
      PersonInfo personInfo = new PersonInfo();
      personInfo.setCardNo(cardNo);
      personInfo.setPhoneNo(phoneNo);
      personInfo.setPersonName(name);
      infos.add(personInfo);
    }
    return infos;
  }

  public static void main(String[] args) {
    String text =
        "化石能源对环境的污染破坏使得社会发展不可持续，人们正积极努力寻找新一代的绿色能源。在这一过程中，氢能因丰富的储量、环境友好的特性、高能量密度以及产生的唯一产物——水，而备受瞩目。虽然氢气生产途径多种多样，但氢气的储存仍是巨大的挑战。传统的高压氢气储存方法要求持续维持高压，由此带来的潜在风险不容忽视。此外，液态储氢虽是可行方法，但能源投入较大、效率相对较低。因此，固态氢气储存被认为是理想的解决方案。固态储存能够在不改变材料结构的前提下，吸收和释放大量的氢气。目前，亟待寻找一种储氢性能出色且能在吻合条件下释放氢气的固态储氢材料。\n"
            + "\n"
            + "中国科学院力学研究所研究员彭庆与广西大学教授欧阳义芳带领的团队，通过第一性原理计算，开发出具有广阔前景的二维固态储氢材料体系Ti-decorated Irida-Graphene（钛修饰的鸢尾花型石墨烯，简称TIG）。这一体系中，Irida-Graphene（鸢尾花型石墨烯，简称IG）是新型的类石墨烯材料，由三原子、六原子和八原子的碳环组成。研究发现，通过在IG上引入修饰性的钛（Ti）原子，其储氢性能可达7.7wt%。 \n"
            + "\n"
            + "该团队对钛原子在鸢尾花型石墨烯不同吸附位点的吸附能力进行计算研究，发现鸢尾花型石墨烯的六原子上方的中空位（Hollow）是最稳定的吸附位点。进一步，该研究通过在体系中逐个加入氢分子（H2），计算了连续吸氢能力。结果显示每个钛原子周围可吸附5个氢分子。由于鸢尾花型石墨烯是二维材料，具有上下两个表面，其两个表面可同时吸附氢分子。当钛原子填满鸢尾花型石墨烯的所有六原子环中心环位时，其可储存的氢气达7.7 wt%。根据6.5 wt%的储氢密度可以使氢燃料电池车续航500英里估计，7.7 wt%储氢密度的续航约为590英里（950公里） \n"
            + "\n"
            + "应用Van't Hoff方程计算得知，TIG的平均放氢温度为524 K（253摄氏度）。电子结构分析结果表明，氢气分子与TIG之间为Kubas型键合。氢气分子在吸附后获得净电荷。这种电荷转移会导致H-H键距延长，但不会使分子与其结构分离。同时，在TIG储存氢气时，钛原子的3d轨道与纯TIG相比，接近费米能级的电子态密度有所减少，表明在吸附后电荷从钛原子的3d轨道转移到氢分子的1s轨道上。随着额外的氢气分子不断集成到系统中，钛原子的3d轨道上电子将继续转移到氢的1s轨道上，形成稳定吸附。 \n"
            + "\n"
            + "为了考量TIG材料的结构热稳定性，该研究还通过CI-NEB方法探究了修饰的钛原子的迁移能力，发现钛原子的扩散迁移能垒为5.0 eV。在平均解吸温度524 K下，钛原子的热能为0.68 eV，低于扩散能垒值。由于结构构型的稳定性以及高能垒值在反应温度下的限制，钛原子的迁移受到限制。这意味着在吸氢和放氢过程中，钛原子不会发生迁移，避免了金属团聚引发的储氢结构破坏，证明了该体系作为可行的储氢介质。科研人员还借助第一性原理分子动力学模拟确定了该材料在室温300 K和高温600 K下的热力学稳定性。上述理论预测为开发新型高效的储氢材料提供了新的可选方案。 \n"
            + "\n"
            + "相关研究成果以Stable and 7.7 wt% hydrogen storage capacity of Ti decorated Irida-Graphene from first-principles calculations为题，发表在International Journal of Hydrogen Energy上。研究工作得到国家自然科学基金和力学所“力英计划”的支持。 ";
    List<PersonInfo> phones = getRealName(text);
    for (PersonInfo personInfo : phones) {
      System.out.println(
          personInfo.getPersonName()
              + "|"
              + personInfo.getCardNo()
              + "|"
              + personInfo.getPhoneNo());
    }
  }
}
